home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 September / Chip_2000-09_cd1.bin / sharewar / Slunec / app / 16 / MOD.SWG / 0060_AMS v2.2 Advanced Module System.pas < prev    next >
Pascal/Delphi Source File  |  1997-05-11  |  20KB  |  557 lines

  1.  
  2.                 ─────  Velvet Studio. AMS Format v2.2 ──────
  3.                            Advanced Module System
  4.  
  5. Offs   Byte(s)    Desc
  6.  
  7. [Header]
  8. 0       7       Header: "AMShdr",1ah
  9. 7       1       Length of ModName (max 30 bytes)
  10. 8       x       ModName
  11. ?       2       Version of format (Hi = MainVer, Low = SubVer e.g. 0202 = 2.2)
  12. +2      1       Nr of Instruments (0-255)
  13. +3      2       Nr of Patterns (1-1024)
  14. +5      2       Nr of Positions (1-65535)
  15. +7      2       Initial BPM (High byte=Integer part, Low byte=Fraction)
  16. +9      1       Initial Speed
  17. +10    1    Default Channels (1-32)
  18. +11    1    Default Commands (1-7)
  19. +12    1    Default    Rows (0-255)
  20. +13     2       Flags:uuuuuuuumfsuuuuu
  21.                       │││││││││││└┴┴┴┴─ Unused
  22.                       ││││││││││└──────    1=Stereo,0=Mono
  23.                       │││││││││└─────── Use Linear freq table.
  24.                       ││││││││└──────── MIDI channels are used in tune.
  25.               └┴┴┴┴┴┴┴───────── Unused
  26.  
  27.  
  28. [Instrument]
  29.         1       Length of InstrumentName (max 30 bytes)
  30.         x       Instrument name
  31.         1       Number of samples in instrument (0-16) (if 0, skip this inst.)
  32.  
  33.       120       Inst number for all notes
  34.  
  35.         1       Volume Env. Speed
  36.         1       Volume sustain point
  37.         1       Volume loop start point
  38.         1       Volume loop end point
  39.         1       Number of volume points    (0-63)
  40.         x*3     Volume envelope info.
  41.                 uuuuuttx xxxxxxxx yyyyyyyy
  42.                 ││││││││ ││││││││ └┴┴┴┴┴┴┴─ Volume (0-7f)
  43.                 │││││││└─┴┴┴┴┴┴┴┴────────── Delta X
  44.                 │││││└┴──────────────────── Curve (0=Line,1=sine 1, 2=sine 2)
  45.                 └┴┴┴┴────────────────────── Reserved for future use.
  46.  
  47.         1       Panning Env. Speed
  48.         1       Panning sustain point
  49.         1       Panning loop start point
  50.         1       Panning loop end point
  51.         1       Number of panning points   (0-63)
  52.         x*3     Points for panning envelope
  53.                 uuuuuttx xxxxxxxx yyyyyyyy
  54.                 ││││││││ ││││││││ └┴┴┴┴┴┴┴─ Pan value (0-ff)
  55.                 │││││││└─┴┴┴┴┴┴┴┴────────── Delta X
  56.                 │││││└┴──────────────────── Curve (0=Line,1=sine 1, 2=sine 2)
  57.                 └┴┴┴┴────────────────────── Reserved for future use.
  58.  
  59.         1       Vibrato Env. Speed
  60.         1       Vibrato sustain point
  61.         1       Vibrato loop start point
  62.         1       Vibrato loop end point
  63.         1       Number of vibrato points   (0-63)
  64.         x*3     Points for vibrato envelope
  65.                 uuuuuttx xxxxxxxx yyyyyyyy
  66.                 ││││││││ ││││││││ └┴┴┴┴┴┴┴─ Vibrato depth (0-ff)
  67.                 │││││││└─┴┴┴┴┴┴┴┴────────── Delta X
  68.                 │││││└┴──────────────────── Curve (0=Line,1=sine 1, 2=sine 2)
  69.                 └┴┴┴┴────────────────────── Reserved for future use.
  70.  
  71.         1       Shadow Instrument. If non-zero, the value=the shadowed inst.
  72.         2       Vib.Amplify+Volume fadeout
  73.                 fedcba9876543210
  74.                 ││││└┴┴┴┴┴┴┴┴┴┴┴ Volume Fadeout.
  75.                 ││└┴──────────── Vibrato Amplify
  76.                 └┴────────────── Reserved
  77.  
  78.         2       Envelope flags:
  79.                 fedcba9876543210
  80.                 │││││││││││││││└ Volume :Loop on
  81.                 ││││││││││││││└─ Volume :Sustain on
  82.                 │││││││││││││└── Volume :Envelope on
  83.                 ││││││││││││└─── Panning:Loop on
  84.                 │││││││││││└──── Panning:Sustain on
  85.                 ││││││││││└───── Panning:Envelope on
  86.                 │││││││││└────── Vibrato:Loop on
  87.                 ││││││││└─────── Vibrato:Sustain on
  88.                 │││││││└──────── Vibrato:Envelope on
  89.                 ││││││└───────── Volume :Break Loop
  90.                 │││││└────────── Panning:Break Loop
  91.                 ││││└─────────── Vibrato:Break Loop
  92.                 └┴┴┴──────────── Reserved
  93.  
  94. [Sample]       (repeated for each sample in the Instrument)
  95.         1       Length of SampName (max 22 bytes)
  96.         x       SampName
  97.         4       Length Of Sample   (if 0, skip this sample.)
  98.     4    Repeat Start for sample
  99.     4    Repeat End for sample
  100.         2       Sampled rate (the rate the sample is sampled in)
  101.     1    Hi Nibble=PanPosition, Lo Nibble=FineTuneValue
  102.         2       SampleRate for C-4 (normally 8363Hz)
  103.         1       Relative note (signed byte)
  104.         1       Volume (0-127)
  105.         1       Info Byte 76543210
  106.                           ││││││└┴─ Reserved
  107.                           │││││└─── 16 bit sample
  108.                           ││││└──── Looped sample
  109.                           │││└───── PingPong loop
  110.                           ││└────── Reserved
  111.                           │└─────── Direction (1=Reversed)
  112.                           └──────── Reserved
  113.  
  114.  Data for rest of Instruments are exactly the same!
  115.  
  116. [Text]
  117.         1       Length of Composer name (max 30 bytes)
  118.         x       Composer Name
  119.       ┌>1       Length of ChannelName (max 11 bytes)
  120.       └─x       ChannelName
  121.         4       Length of Description (packed, inclusive header)
  122.          4       Length of Description (unpacked)
  123.          1       Version of packroutine (currently 01h)
  124.          1       PreProcessing type (currently none)
  125.          1       Packing method (Currently RLE with #255 as packbyte)
  126.          x       Description of Module
  127.  
  128.  The Number of ChannelNames are always 32.
  129.  
  130. [PatternOrder]
  131.     x    PatternNr. Holds number (0-65535) to tell the tracker what
  132.                 pattern to play at that position (x=Nr of Positions)
  133.  
  134. [PatternData]
  135.     4    PatternSize (packed)
  136.         1       PatternLength-1 (0-255)
  137.         1       cccsssss
  138.                 c = Nr of Commands used in pattern
  139.                 s = Nr of Channels-1 used in pattern (0-31)
  140.         1       Length of PatternName (max 10 bytes)
  141.         x       PatternName
  142.         x       PatternData
  143.  
  144.         fp0aaaaa ennnnnnn iiiiiiii [rgcccccc bbbbbbbb...]
  145.  
  146.         Legend:
  147.                 f       1=Last data chunk on the row.
  148.                 p       0=Read Note+InstNr 1=Don't Read Note+Instnr
  149.                 a       Channel (0-31)
  150.                 e       1=Read one command
  151.                 n       Note. 2-121 (C-0 to B-9), 1=Key off note.
  152.                 i       InstrumentNr (0-255)
  153.                 r       1=Read one more command
  154.                 g       1=Low 6 bits are volume/2
  155.                 c       Command-nr
  156.                 b       Command-byte
  157.  
  158.                 If first byte = -1 then this row is empty
  159.  
  160.         If g is set, the command only consist of that byte and
  161.         the low 6 bits are assumed to be a volume command. You
  162.         have to multiply the volume by 2 to get the proper value
  163.                 (Volume will only be stored this way if it's even)
  164.  
  165. [Samples]
  166.         All samples stored after eachother, packed with a special packing
  167.         method not described here since we're so lazy! You've got a routine
  168.         that does the unpacking instead. (You can also save the samples
  169.         unpacked, and it that case they are in twos complement form.)
  170.  
  171.  
  172.   ** MIDI not yet supported. If MIDI Bit=0 then skip this section **
  173.  
  174.  
  175. [MIDI Section]
  176.         4       MIDI Section Size
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.                 ─────  Velvet Studio. AIS Format v1.0 ──────
  185.                          Advanced Instrument System
  186.  
  187.  
  188. The only that differs the AIS format from the Instrument used in the AMS is
  189. the following header before the other info:
  190.  
  191. Offset  bytes   Desc
  192.  
  193. 0       7       Header: "AIShdr",1ah
  194. 7       1       Type: 0aah=new version, <1fh=old version (Only new versions
  195.                 should exist, so don't bother with this flag)
  196. 8       2       Version of format (Hi = MainVer, Low = SubVer e.g. 0100 = 1.0)
  197.  
  198.  
  199. The actual sampledata is stored right after the Instrument data.
  200.  
  201.  
  202.                 ─────  Velvet Studio ASE Format v1.0 ──────
  203.                            Advanced Sample System
  204.  
  205. Offset  Bytes   Desc
  206. 0    7       Header: "ASEhdr",1ah
  207. 7    2       Version of format (Hi = MainVer, Low = SubVer e.g. 0100 = 1.0)
  208. 9    1    Length of SampName (max 22 bytes)
  209. 10    x    SampName
  210.     4    Length Of Sample
  211.     4    Repeat Start for sample
  212.     4    Repeat End for sample
  213.     2    Sampled rate (the rate the sample is sampled in)
  214.     1    Hi Nibble=PanPosition, Lo Nibble=FineTuneValue
  215.     2    SampleRate for C-4 (normally 8363Hz)
  216.     1    Relative note (signed byte)
  217.     1    Volume (0-127)
  218.     1    Info Byte 76543210
  219.                           ││││││└┴─ Reserved
  220.                           │││││└─── 16 bit sample
  221.                           ││││└──── Looped sample
  222.                           │││└───── PingPong loop
  223.                           ││└────── Reserved
  224.                           │└─────── Direction (1=Reversed)
  225.                           └──────── Reserved
  226.     x    Sample data. Maybe packed.
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.                    ────== Velvet Studio Misc Info ==────
  238.  
  239.  
  240. * The BPM Fraction value is multiplied with 26 to be able to do some
  241.   optimizations. (9*26≈255) Values can range from 0*26 to 9*26.
  242.  
  243. * The Default Channels/Command/Rows can be ignored since they are only used
  244.   internally in VS.
  245.  
  246. * If a Shadow sample is encountered, DON'T read any sample data for that
  247.   sample, instead use the same sample data as it's shadowed to.
  248.  
  249. * Each pattern can have different number of commands/rows/channels
  250.   therefore you must use a variable patternwidth and length.
  251.  
  252. * Up to 7 commands/note is possible
  253.  
  254. * When allocating the needed amount of channels, check through the
  255.   song to see which pattern that uses most channels.
  256.  
  257.  
  258.  
  259.  
  260.                        ───────────── Volume ─────────────
  261.  
  262.  
  263. (SampleVol*MasterVol*GlobalVol*ChannelMasterVol*EnvelopeVol/127^4)*FadeOut/65536
  264.  
  265.  
  266.  
  267.                        ───────────── PanPot ─────────────
  268.  
  269. Sample panposition ranges from 0 to 15, where 0 means CH(annel). If it is set
  270. to CH, then use the default channel panpot instead of the sample panpot.
  271.  
  272. Sample Panposition 8 is middle, 7 is skipped since 7 and 8 is the same on a GUS,
  273. and with an even number of panpositions you won't get a symmetric pan.
  274.  
  275. If ChannelPan<=7 Then ChannelPan=ChannelPan-1
  276.    Pan=EnvelopePan/16-8+ChannelPan
  277. If Pan<0 Then Pan=0
  278. If Pan>15 Then Pan=15
  279.  
  280. An 8xx command sets the ChannelPanpot, and if Sample Panpot is set to CH(annel)
  281. the ChannelPanpot will be used on the channel. If SamplePanpot is set to
  282. some value, that value is used instead, unless a 8xx is inserted on the same
  283. row as the note... Confusing? well, read it again...
  284.  
  285.  
  286.                        ────────────── Freq ──────────────
  287.  
  288. Notes ranges from 0 to 119 (C-0 - B-9)
  289.  
  290. AmigaFreq:
  291.  
  292. PeriodTable: 109568,103418,97614,92135,86964,82083,77476,73128,69024,65150,61493,58042
  293.  
  294. Period=((Note MOD 12 [PeriodTable])/2^Note DIV 12)
  295. Freq=(16*428*C2rate)/Period+PerAdd
  296.  
  297. Linear Freq:
  298.  
  299. Freq = C4Rate*2 ^ ((Note+FreqAdd) / 12 - 4)
  300.  
  301. (Actually the same as FT2, but with some minor modifications)
  302.  
  303.                        ──────────── FineTune ────────────
  304. AmigaFreq:
  305.  
  306. If FineTune>7 Then FineTune=ABS(FineTune-16)
  307.         PerAdd=(Period-1)-(Period)*FineTune/8
  308. If FineTune<=7 Then PerAdd=ABS((Period)-(Period+1)*FineTune/8)
  309.  
  310. (Period +/- 1 here means the Period for the note being finetuned +/- one note)
  311.  
  312. Linear Freq:
  313.  
  314. If FineTune>7 Then FreqAdd=NEG((FineTune-16)/8) Else FreqAdd=NEG(FineTune/8)
  315. (one note equals to 1 FreqAdd)
  316.  
  317.  
  318.                       ──────────── Envelopes ────────────
  319.  
  320.  
  321. The Sinecurve for the envelope.
  322. (The 4:th part of the Sinecurve only. I calculate the other parts using this
  323. curve.)
  324.  
  325. It has got 512 values since the maximum distance between 2 poins can be 512.
  326.  
  327. EnvSine         db 0,1,2,2,3,4,5,5,6,7,8,8,9,10,11,12,12,13,14,15,16,16,17,18,19,19,20,21,22,22,23,24,25,26,26,27,28,29,30,30,31,32,33,33,34,35,36,36,37,38,39,39,40,41,42,43,43,44,45,46,46,47,48,49,49,50,51,52,52,53,54,55,55,56,57,58,58,59,60,61,61,62,63,64,64,65,66,67,67,68,69,70,70,71,72,73,74,74,75,76,76,77,78,79,79,80,81,82,82,83,84,84,85,86,87,87,88,89,90,90,91,92,93,93,94,95,96,96,97,98,98,99,100,100,101,102,103,103,104,105,106,106,107,108,108,109,110,110,111,112,113,113,114,115,115,116,117,117,118
  328.                 db 119,119,120,121,121,122,123,123,124,125,126,126,127,127,128,129,130,130,131,132,132,133,134,134,135,136,136,137,138,138,139,139,140,141,141,142,143,143,144,145,145,146,146,147,148,148,149,150,150,151,152,152,153,153,154,155,155,156,156,157,158,158,159,160,160,161,161,162,163,163,164,164,165,166,166,167,167,168,168,169,170,170,171,171,172,173,173,174,174,175,175,176,177,177,178,178,179,179,180,180,181,181,182,182,183,184,184,185,185,186,186,187,187,188,188,189,190,190,191,191,192,192,193
  329.                 db 193,194,194,195,195,196,196,197,197,198,198,199,199,200,200,201,201,201,202,202,203,203,204,204,205,205,206,206,207,207,207,208,208,209,209,210,210,211,211,211,212,212,213,213,214,214,214,215,215,216,216,216,217,217,218,218,219,219,219,220,220,221,221,221,222,222,223,223,223,224,224,224,225,225,225,226,226,227,227,227,228,228,228,229,229,229,230,230,230,231,231,231,232,232,232,233,233,233,234,234,234,234,235,235,235,236,236,236,237,237,237,237,238,238,238,239,239,239,239,240,240,240,240
  330.                 db 241,241,241,241,242,242,242,242,243,243,243,243,244,244,244,244,244,245,245,245,245,246,246,246,246,246,247,247,247,247,247,248,248,248,248,248,248,249,249,249,249,249,249,250,250,250,250,250,250,250,251,251,251,251,251,251,251,252,252,252,252,252,252,252,252,253,253,253,253,253,253,253,253,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
  331.  
  332. Envelope Types:
  333.  
  334. 0=Line.  A straight line, as in FT2
  335. 1=Sine1. 3:d or 4:th Part of the sinecurve depending on the locations
  336.          of the points between
  337. 2=Sine2. 1:d or 2:d Part of the sinecurve depending on the locations
  338.          of the points between
  339.  
  340.   ---
  341.  / | \
  342. | 4|1 |
  343. |-----|
  344. | 3|2 |
  345.  \ | /
  346.   ---
  347.  
  348. The Break flag in the Envelope is used to stop looping the envelope when
  349. a keyoff is detected.
  350.  
  351. Calculating the Vibrato Envelope:
  352. Using a sinecurve with full amplitude (80h) and Vibrato Amplify set to 3
  353. equals the command 4xf played on C-5 (or using Linear Freq)
  354. Changing the Vib Amplify is just a matter of doubling/halving the amplitude.
  355. 0=No amplify
  356. 1=2*Amplitude
  357. 2=4*Amplitude
  358. 3=8*Amplitude
  359.  
  360. A simple but clear "formula":
  361. Amp 80h, Ampf 0 = Amp 40h, Ampf 1 = Amp 20h, Ampf 2 = Amp 10h, Ampf 3
  362.  
  363.  
  364.  
  365. The following routine is used to unpack samples. There are no difference
  366. between 8 and 16 bits packing yet, and therefore 16 bits samples aren't
  367. packed very well...
  368.  
  369. ;▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  370. ;                             UnPack sample method 1
  371. ;▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  372. ; Input:
  373. ;         esi = input offset
  374. ;         edi = dest offset
  375. ;         ecx = input size
  376. ; Output:
  377. ;         ecx = output size
  378. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  379. UnPackMethod1   Proc    Near
  380.         pushad
  381.         mov     inputoffset,esi
  382.         mov     outputoffset,edi
  383.         mov     inputsize,ecx
  384.  
  385.                                           ;unpacking
  386.         mov     esi,inputoffset
  387.         mov     edi,outputoffset
  388.         mov     ecx,dword ptr [esi]
  389.         mov     inputsize,ecx
  390.         mov     ecx,dword ptr [esi+4]
  391.         mov     al,byte ptr [esi+8]
  392.         mov     packcharacter,al
  393.         add     esi,9
  394. unpackloop:
  395.         lodsb
  396.         cmp     al,packcharacter
  397.         jz      unpacka
  398.         stosb
  399.         loop    unpackloop
  400.         jmp     endofunpack
  401. unpacka:
  402.         lodsb
  403.         dec     ecx
  404.         cmp     al,0
  405.         jz      putpackcharacter
  406.         push    ecx
  407.         movzx   ecx,al
  408.         lodsb
  409.         rep     stosb
  410.         pop     ecx
  411.         dec     ecx
  412.         loop    unpackloop
  413.         jmp     endofunpack
  414. putpackcharacter:
  415.         mov     al,packcharacter
  416.         stosb
  417.         loop    unpackloop
  418. endofunpack:
  419.  
  420.         mov     edi,inputoffset         ;clear
  421.         mov     ecx,inputsize
  422.         xor     eax,eax
  423.         mov     edx,ecx
  424.         shr     ecx,2
  425.         rep     stosd
  426.         mov     ecx,edx
  427.         and     ecx,3
  428.         rep     stosb
  429.  
  430.         mov     edi,inputoffset                 ;unpack bit split
  431.         mov     esi,outputoffset
  432.         mov     ebp,edi
  433.         mov     ecx,inputsize
  434.         add     ebp,ecx
  435.         mov     dl,10000000b
  436. bitunpackloop:
  437.         push    ecx
  438.  
  439.         xor     dh,dh
  440.         lodsb
  441.         mov     ecx,8
  442. bitunpack2:
  443.         mov     bl,al
  444.         and     bl,dl
  445.         add     cl,dh
  446.         ror     bl,cl
  447.         sub     cl,dh
  448.         ror     dl,1
  449.         or      byte ptr [edi],bl
  450.         inc     edi
  451.         cmp     edi,ebp
  452.         jnz     notsettaback
  453.         mov     edi,inputoffset
  454.         inc     dh
  455. notsettaback:
  456.         loop    bitunpack2
  457.         mov     cl,dh
  458.         ror     dl,cl
  459.  
  460.         pop     ecx
  461.         loop    bitunpackloop
  462.  
  463.                                                 ;delta unpack
  464.         mov     esi,inputoffset
  465.         mov     edi,outputoffset
  466.         mov     ecx,inputsize
  467.         xor     bl,bl
  468. deltaunpack:
  469.         lodsb
  470.         cmp     al,128
  471.         jz      notnegative
  472.         test    al,10000000b
  473.         jz      notnegative
  474.         and     al,01111111b
  475.         neg     al
  476. notnegative:
  477.         sub     bl,al
  478.         mov     byte ptr [edi],bl
  479.         inc     edi
  480.         loop    deltaunpack
  481.  
  482.         sub     edi,outputoffset
  483.         mov     inputoffset,edi
  484.         popad
  485.         mov     ecx,inputoffset
  486.         ret
  487. UnPackMethod1   Endp
  488.  
  489.  
  490.            New commands
  491.            ------------
  492.  
  493.  
  494.  8 0x    PanPosition (0-f)
  495.  E 80    Break SampleLoop
  496. 10 00    Play Sample Forwards
  497. 10 01    Play Sample BackWards
  498. 10 02    Enable Bidirectional Loop
  499.          (only on looped samples)
  500. 11 xx    Extra Fine Slide Up (4 times finer than normal)
  501. 12 xx    Extra Fine Slide Down (4times finer than normal)
  502. 13 xy    Retrig with volslide (compare with E9)
  503.          The x value tells if there should be a
  504.          volumeslide between the retrigs.
  505.            0: 0    (No volslide)    8: 0 (No volslide)
  506.            1: -1                    9: +1
  507.            2: -2                    A: +2
  508.            3: -4                    B: +4
  509.            4: -8                    C: +8
  510.            5: -16                   D: +16
  511.            6: 2/3 * the orig. vol.  E: 3/2 * the orig vol
  512.            7: 1/2 * the orig. vol.  F: 2 * the orig.vol.
  513. 15 xx   Just Like 5, but with 2 times finer volslide.
  514. 16 xx   Just Like 6, but with 2 times finer volslide.
  515. 1A xx   2 times finer volslide than A.
  516. 1C xx   Channel MasterVolume (0-7fh)
  517. 1D xx   Long PatternBreak (use instead of 0D when using
  518.         long patterns). xx is in Hex
  519. 1E 1x   Just like E1, but this uses all octaves.
  520. 1E 2x   Just like E2, but this uses all octaves.
  521. 1E Ax   2 times Finer volslide than EA.
  522. 1E Bx   2 times Finer volslide than EB.
  523. 1F 0x   Set BPM Decimal value. (0-9)
  524. 18 xy   PanSlide x=left speed, y=right speed.
  525. 20 xx   Key Off at tic xx
  526. 21 xx   Just like 1, but this uses all octaves.
  527. 22 xx   Just like 2, but this uses all octaves.
  528. 2A xx   Global VolumeSlide
  529. 2C xx   Global Volume (0-7fh)
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537. Well, that's about it. I guess there are alot of questions left so go ahead
  538. and ask me if there's something you wanna know.
  539. BTW, I don't take any responsibilities for faulty info in this doc :)
  540. (especially the formulas)
  541.  
  542. Mail:
  543. ------
  544. Patrik Oscarsson
  545. Hermansvagen 44
  546. S-554 53 Jonkoping
  547. Sweden
  548.  
  549. E-Mail. (Valid till Autumn '96)
  550. -------------------------------
  551. da94ospa@hj.se
  552.  
  553. Telephone
  554. ---------
  555. +46(0)36-711593
  556.  
  557.